package com.cn.wanxi.service;

import com.cn.wanxi.IO.NavModelIO;
import com.cn.wanxi.model.NavModel;
import com.cn.wanxi.util.IOReadWrite;
import com.cn.wanxi.util.Path;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class NavService {
    /**
     * 一个类包括几大块
     * 1.属性
     * <p>
     * 2.方法
     * 执行行为
     * 3.代码块
     * 4.构造方法
     * 一个完整的方法
     * 权限修饰符  特征修饰符 返回值类型 方法名称（参数类型  参数名称） 异常{
     * 执行体
     * 返回值
     * }
     * 代码块和静态代码块：加载类的时候先加载代码块里面的方法
     * 如果有静态代码块，先加载静态代码块
     */ {
//代码块
        System.out.println("1111");
    }

    static {
//     静态代码块
        System.out.println("2222");
    }

    /**
     * 如果类里面没有写构造方法，则有一个默认的无参数的构造方法
     * 1.如果类里面有了其他构造方法（有参数的构造方法）那么默认的构造方法失效
     * 页面加载时，先执行我们的代码块，在执行构造方法
     * 永远静态先执行
     */
    public NavService(String name) {

    }

    public NavService() {

    }

    /**
     * 得到导航数据
     *
     * @return
     */
    public List<NavModel> getNavModelList() {

        /**
         * 1.写入记事本
         * 2.读取记事本
         * 3.封装list
         */
        writeNote(Path.PATH.getPath(), Path.NAV_NAME.getPath(), Path.SPLIT.getPath());
        String result = new IOReadWrite().readNote(Path.PATH.getPath(), Path.NAV_NAME.getPath());
        return setData(result);
    }

    public static void main(String[] args) {
        new NavService().getNavModelList();
    }

    private List<NavModel> setData(String result) {
        String[] results = result.split(Path.SPLIT.getPath());
        String href = results[0];
        String title = results[1];
        href = href.replace("[", "");
        href = href.replace("]", "");
        title = title.replace("[", "");
        title = title.replace("]", "");
        List<NavModel> list = new ArrayList<>();//集合
        String[] hrefs = href.split(",");//数组
        String[] titles = title.split(",");
//        /**
//         * 数组的写法赋值方式
//         * 1.静态赋值 {"home.html", "company.html"}
//         * 2.动态赋值
//         */
        for (int i = 0; i < hrefs.length; i++) {
            NavModel navModel = new NavModel();//为了封装导航
            navModel.setHref(hrefs[i]);
            navModel.setTitle(titles[i]);
            list.add(navModel);
        }
        return list;
    }

    /**
     * @param path     路径
     * @param fileName 文件名
     * @param split    分隔符
     */
    private void writeNote(String path, String fileName, String split) {
//        查看当前的路径是否正确，是否存在
        File directory = new File(path);
        if (!directory.exists()) {
            directory.mkdirs();
        }
        File file = new File(directory, fileName);
        try {
            file.createNewFile();
            OutputStream outputStream = new FileOutputStream(file);
            NavModelIO navModel = new NavModelIO();
            String hrefs[] = navModel.getHrefs();
            String href = Arrays.toString(hrefs);
            outputStream.write(href.getBytes());
            outputStream.write(split.getBytes());
            outputStream.write(Arrays.toString(navModel.getTitles()).getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
